package replSet;

import java.util.ArrayList;
import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;

/**
 * 
 * @Title: MyMongoTest.java
 * @Package replSet
 * @Description: 这个是本地模式与副本集集成
 * @author 刘伟 15818570028@163.com
 * @date 2017年2月20日 下午1:30:11
 * @version V1.0
 */
public class MyMongoTest {
	public static void main(String[] args) throws Exception {

		MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		build.connectionsPerHost(50); // 与目标数据库能够建立的最大connection数量为50
//		build.autoConnectRetry(true); // 自动重连数据库启动
		build.threadsAllowedToBlockForConnectionMultiplier(50); // 如果当前所有的connection都在使用中，则每个connection上可以有50个线程排队等待
		/*
		 * 一个线程访问数据库的时候，在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
		 * 这里比较危险，如果超过maxWaitTime都没有获取到这个连接的话，该线程就会抛出Exception
		 * 故这里设置的maxWaitTime应该足够大，以免由于排队线程过多造成的数据库访问失败
		 */
		build.maxWaitTime(1000 * 60 * 2);
		build.connectTimeout(1000 * 60 * 1); // 与数据库建立连接的timeout设置为1分钟

		MongoClientOptions myOptions = build.build();
		List<ServerAddress> list = new ArrayList<ServerAddress>();
		ServerAddress tmp1 = new ServerAddress("10.1.10.83", 20001);
		ServerAddress tmp2 = new ServerAddress("10.1.10.84", 20002);
		ServerAddress tmp3 = new ServerAddress("10.1.10.85", 20003);

		list.add(tmp1);
		list.add(tmp2);
		list.add(tmp3);

		MongoClient mongo = new MongoClient(list, myOptions);

		DB db = mongo.getDB("dc");

		DBCollection users = db.getCollection("tuser");

		BasicDBObject d1 = new BasicDBObject();
		d1.put("uname", "myU12");
		d1.append("userId", "myU2").append("name", "updatename222");
		users.insert(d1);
		System.out.println("操作成功！");

		mongo.close();

	}
}
